/*
里面包括一条日志消息中，要包含的信息：
    1. 日志的输出时间 -- 用于过滤日志输出时间
    2. 日志等级 -- 用于过滤日志等级
    3. 源文件名称
    4. 源代码行号 -- 用于定位出现错误的代码位置
    5. 线程ID -- 用于过滤出错的线程
    6. 日志主体消息 -- 查看出错原因是什么
    7. 日志器名称 -- 支持多日志器，用于过滤日志器
*/

#ifndef __M_MESSAGE_H__
#define __M_MESSAGE_H__

#include "Level.hpp"
#include "Util.hpp"

#include <iostream>
#include <string>
#include <thread> // 日志器，需要多线程

namespace LogModule
{
    // 因为这些内容本来就是需要public的，所以直接使用struct了
    struct LogMessage
    {
        time_t  _ctime;           // 时间 [2023-08-16 12:38:26]
        size_t _line;            // 行号 11
        const std::string _file; // 源文件名称 main.cc
        LogLevel::Level _level;  // 日志等级
        std::thread::id _tid;    // 线程ID
        std::string _payload;    // 日志主体消息，通常使用payload(有效载荷)起名
        std::string _name;       // 日志器名称
        // 构造函数，需要传入的有：
        // line 行号           file 文件名称          level 日志等级
        // payload 有效载荷    name 日志器名称
        LogMessage(size_t line, const std::string &file, LogLevel::Level level,
                   std::string payload, std::string name)
            : _ctime(UtilModule::Date::Now()),
              _line(line),
              _file(file),
              _level(level),
              _tid(std::this_thread::get_id()),
              _payload(payload),
              _name(name)
        {
        }
    };
}

#endif